package yangsw87.swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import java.awt.Dimension;

import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JLabel;

import java.awt.Color;

import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTextField;

import yangsw87.dao.GalleryDAO;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;

public class ProcessImage extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTextField regName;
	private JTextField showName;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ProcessImage dialog = new ProcessImage();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public ProcessImage() {
		setBounds(100, 100, 640, 480);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BorderLayout(0, 0));
		{
			JPanel regPhoto = new JPanel();
			regPhoto.setForeground(Color.GRAY);
			regPhoto.setPreferredSize(new Dimension(250, 10));
			contentPanel.add(regPhoto, BorderLayout.WEST);
			
			final JLabel regImg = new JLabel("");
			
			JButton regBtn = new JButton("사진등록");
			regBtn.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					// 아이디 등록창에 입력값이 없으면 경고 표시
					if(regName.getText().equals("")){
						JOptionPane.showMessageDialog(null, "사진등록시 아이디 입력안했네?");
						return;
					}
					
					// 사진등록 - 이미지만 처리하기 위해
					// 이미지 파일 확장자를 필터로 등록
					FileNameExtensionFilter filter = new FileNameExtensionFilter("이미지 파일들", "png", "jpg", "gif");
					
					// 사용자가 이미지를 선택할 수 있도록
					// 파일열기 대화상자 객체 생성
					JFileChooser fc = new JFileChooser();
					fc.setFileFilter(filter);
					
					// 파일열기 대화상자를 화면에 띄우고
					// 선택한 작업내용을 choice에 저장
					int choice = fc.showOpenDialog(ProcessImage.this);
					
					// 대화상자에서 열기 버튼을 클릭했다면
					// 선택한 이미지의 전체 경로를 알아냄
					if(choice == JFileChooser.APPROVE_OPTION) {
						String img = fc.getSelectedFile().getPath();
					
						// 선택한 이미지를 특정장소에 저장하기 위해
						// 저장위치를 경로로 지정
						String myPhoto = fc.getSelectedFile().getName();
						String savePath = "c:/Java/myPhoto/" + myPhoto;
					
						// 선택한 이미지를 지정한 경로에
						// 생성하기 위해 BufferedImage 객체 이용
						BufferedImage image = null;
						try {
							// 원본 이미지를 File 객체로 읽어옴
						 	// File origin = new File(fc.getSelectedFile().getPath());
							File origin = new File(img);
						
							// File 객체로 지정한 이미지 파일을
							// ImageIO 객체로 메모리로 읽어 옴
							image = ImageIO.read(origin);
						
							// 메모리로 읽어온 이미지 내용을
							// 지정한 위치에 지정한 형식으로 저장
							ImageIO.write(image, "jpg", new File(savePath));
						} catch (Exception ex) {
							ex.printStackTrace();
						}
						
						// galleryv1 테이블에 등록한 이미지 저장
						if (GalleryDAO.insertPhoto(regName.getText(), myPhoto)>0) {
							JOptionPane.showMessageDialog(null, "이미지 등록 완료");
						}
					
						// JLable에 이미지 출력
						regImg.setIcon(new ImageIcon(savePath));
					}
				}
			});
			
			regName = new JTextField();
			regName.setColumns(10);
			GroupLayout gl_regPhoto = new GroupLayout(regPhoto);
			gl_regPhoto.setHorizontalGroup(
				gl_regPhoto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGap(28)
						.addComponent(regImg, GroupLayout.PREFERRED_SIZE, 192, GroupLayout.PREFERRED_SIZE)
						.addContainerGap(30, Short.MAX_VALUE))
					.addGroup(Alignment.TRAILING, gl_regPhoto.createSequentialGroup()
						.addContainerGap(61, Short.MAX_VALUE)
						.addComponent(regName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addGap(73))
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGap(79)
						.addComponent(regBtn)
						.addContainerGap(90, Short.MAX_VALUE))
			);
			gl_regPhoto.setVerticalGroup(
				gl_regPhoto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGap(44)
						.addComponent(regImg, GroupLayout.PREFERRED_SIZE, 215, GroupLayout.PREFERRED_SIZE)
						.addGap(20)
						.addComponent(regName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addComponent(regBtn)
						.addContainerGap(65, Short.MAX_VALUE))
			);
			regPhoto.setLayout(gl_regPhoto);
		}
		{
			JPanel regPhoto = new JPanel();
			regPhoto.setForeground(Color.GRAY);
			regPhoto.setPreferredSize(new Dimension(250, 10));
			contentPanel.add(regPhoto, BorderLayout.EAST);
			
			final JLabel showImg = new JLabel("");
			
			JButton showBtn = new JButton("사진보기");
			showBtn.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					
					if (showName.getText().equals("")){
						JOptionPane.showMessageDialog(null, "사진을 볼면 아이디를 쓰게나");
					}
					
					String imgPath = "C:/Java/myPhoto/" + GalleryDAO.selectOnePhoto(showName.getText());
					showImg.setIcon(new ImageIcon(imgPath));
				}
			});
			
			showName = new JTextField();
			showName.setColumns(10);
			GroupLayout gl_regPhoto = new GroupLayout(regPhoto);
			gl_regPhoto.setHorizontalGroup(
				gl_regPhoto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGroup(gl_regPhoto.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_regPhoto.createSequentialGroup()
								.addGap(26)
								.addComponent(showImg, GroupLayout.PREFERRED_SIZE, 192, GroupLayout.PREFERRED_SIZE))
							.addGroup(gl_regPhoto.createSequentialGroup()
								.addGap(66)
								.addComponent(showName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
							.addGroup(gl_regPhoto.createSequentialGroup()
								.addGap(84)
								.addComponent(showBtn)))
						.addContainerGap(32, Short.MAX_VALUE))
			);
			gl_regPhoto.setVerticalGroup(
				gl_regPhoto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGap(44)
						.addPreferredGap(ComponentPlacement.RELATED)
						.addComponent(showImg, GroupLayout.PREFERRED_SIZE, 215, GroupLayout.PREFERRED_SIZE)
						.addGap(20)
						.addComponent(showName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.UNRELATED)
						.addComponent(showBtn)
						.addContainerGap(65, Short.MAX_VALUE))
			);
			regPhoto.setLayout(gl_regPhoto);
		}
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}
}
